package basicGrammar;

import com.sun.xml.internal.bind.v2.runtime.output.SAXOutput;

import java.util.Arrays;
import java.util.Random;

public class Demo5_Array_example {

    public static void main(String[] args) {
        //第一题
//        int[] first = {1,2,3,5,6,7};
//        int[] second = {4,5,6,7,8,9,10,11};
//        //定义一个新的数组，长度是两个原始数组的长度和
//        int[] all = new int[first.length+second.length];
//        //定义两个原始数组的索引
//        int index_f = 0;
//        int index_s = 0;
//
//        for (int i = 0; i < all.length; i++) {
//            //@TODO 可以考虑优化
//            if(index_f >= first.length){
//                all[i] = second[index_s++];
//            }else if(index_s >= second.length){
//                all[i] = first[index_f++];
//            }else{
//                if(first[index_f] < second[index_s]){
//                    all[i] = first[index_f];
//                }else{
//                    all[i] = second[index_s];
//                }
//            }
//        }
//
//        System.out.println(Arrays.toString(all));

        //第二题 回文数
//        int[] nums = {1,2,3,9,8,2,1};
//
//        boolean flag = true;
//
//        for (int i = 0; i < nums.length/2; i++) {
//            if(nums[i] != nums[nums.length-1-i]){
//                flag = false;
//                break;
//            }
//        }
//
//        if(flag){
//            System.out.println(Arrays.toString(nums)+"是回文数");
//        }else{
//            System.out.println(Arrays.toString(nums)+"不是回文数");
//        }

        //第三题 评委打分
//        int[] scores = {5,3,2,8,5,7,1,5,9,3};
//
//        int max = scores[0];
//        int min = scores[0];
//        int sum = 0;
//
//        for (int i = 0; i < scores.length; i++) {
//            if(scores[i]>max){
//                max = scores[i];
//            }else if(scores[i]<min){
//                min = scores[i];
//            }
//            sum += scores[i];
//        }
//        System.out.println("max:"+max);
//        System.out.println("min:"+min);
//        System.out.println("sum:"+sum);
//
//        double score = (double)(sum - max - min) / (scores.length-2);
//        System.out.println("成绩："+score);

        //第四题 斐波那契数列
//        int[] fib = new int[20];
//        fib[0] = 1;
//        fib[1] = 1;
//
//        for (int i = 2; i < fib.length; i++) {
//            fib[i] = fib[i-1] + fib[i-2];
//        }
//
//        System.out.println(Arrays.toString(fib));
//        System.out.println(fib[19]);

        //第五题 添加删除元素
//        int[] nums = {1,2,3,4,5,0,0,0,0,0};
//
//        int insertIndex = 0;
//        int insertNum = 100;
//        int size = 5;
//
//        for (int i=size; i>insertIndex; i--) {
//            nums[i] = nums[i-1];
//        }
//
//        nums[insertIndex] = insertNum;
//
//        size++;
//        System.out.println(Arrays.toString(nums));

        //第六题 组合
//        String[] names= {"关羽","张飞","赵云","马超","黄忠","吕布"};
//
//        for (int i = 0; i <= names.length-3; i++) {
//            for (int j = i+1; j <= names.length-2 ; j++) {
//                for (int k = j+1; k <= names.length-1 ; k++) {
//                    System.out.println(names[i]+","+names[j]+","+names[k]);
//                }
//            }
//        }

        //第七题 判断数组是否有重复数字
//        int[] nums = {2,4,5};
//
//        outer:for (int i = 0; i < nums.length-1; i++) {
//            for (int j = i+1; j < nums.length; j++) {
//                if(nums[i] == nums[j]){
//                    System.out.println("有重复数字");
//                    break outer;
//                }
//            }
//        }

        //第八题 TOP3
//        int[] nums = {6,4,23,89,1,32,222,100,5,9};
//
//        int temp = 0;
//        for (int i = 0; i < nums.length-1; i++) {
//            for (int j = 0; j < nums.length-1-i; j++) {
//                if(nums[j]<nums[j+1]){
//                    temp = nums[j];
//                    nums[j] = nums[j+1];
//                    nums[j+1] = temp;
//                }
//            }
//        }
//
//        System.out.println(Arrays.toString(nums));
//        for (int i = 0; i < 3; i++) {
//            System.out.println(nums[i]);
//        }

        //第九题 随机打乱顺序
//        int[] nums = {1,2,3,4,5,6,7,8,9,10};
//
//        Random rand = new Random();
//
//        int temp = 0;
//
//        for (int i = 0; i < nums.length; i++) {
//            int rand_frist = rand.nextInt(nums.length);
//            int rand_second = rand.nextInt(nums.length);
//
//            temp = nums[rand_frist];
//            nums[rand_frist] = nums[rand_second];
//            nums[rand_second] = temp;
//        }
//
//        System.out.println(Arrays.toString(nums));

        //第十题 找出两个数组中的相同元素
//        int[] aArr = {1,3,5,6,7};
//        int[] bArr = {2,5,7,9,10,12,16};
//
//        for (int i = 0; i < aArr.length; i++) {
//            for (int j = 0; j < bArr.length; j++) {
//                if(aArr[i] == bArr[j]){
//                    System.out.print(aArr[i]+" ");
//                }else if(bArr[j] > aArr[i]){
//                    break;
//                }
//            }
//        }

        //第十一题 移除元素0
//        int[] oldArr={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
//
//        int newArrSize = 0;
//
//        for (int i = 0; i < oldArr.length ; i++) {
//            if(oldArr[i]!=0){
//                newArrSize++;
//            }
//        }
//
//        int[] newArr = new int[newArrSize];
//
//        int j = 0;
//        for (int i = 0; i < oldArr.length; i++) {
//            if(oldArr[i] != 0){
//                newArr[j++] = oldArr[i];
//            }
//        }
//
//        System.out.println(Arrays.toString(newArr));

        //第十二题 非零数前移
//        int[] nums = {5,6,8,0,6,0,1,0,56};
//
//        int waitInZeroIndex = 0;
//
//        for (int findNumIndex = 0; findNumIndex < nums.length; findNumIndex++) {
//            //从数组的起始位置开始的非零元素，两个指针同步前移
//            if (nums[findNumIndex]!=0 && findNumIndex==waitInZeroIndex) {
//                waitInZeroIndex++;
//            }else if(nums[findNumIndex]!=0){
//               nums[waitInZeroIndex++] = nums[findNumIndex];
//               nums[findNumIndex] = 0;
//            }
//        }
//
//        System.out.println(Arrays.toString(nums));

        //第十三题 去重
//        int[] nums = {1,1,2,3,3,3,4,5,5,5};
//        int newNumSize = 1;
//        for (int i = 0; i < nums.length-1; i++) {
//            if(nums[i] != nums[i+1]){
//                newNumSize++;
//            }
//        }
//        System.out.println(newNumSize);
//
//        int[] newNums = new int[newNumSize];
//        newNums[0] = nums[0];
//        int j = 1;
//        for (int i = 0; i < nums.length-1; i++) {
//            if(nums[i] != nums[i+1]){
//                newNums[j++] = nums[i+1];
//            }
//        }
//
//        System.out.println(Arrays.toString(newNums));

        //第十四题 杨辉三角形
//        int lineCount = 10;
//
//        int[][] triangle = new int[lineCount][];
//        //第一行数据
//        triangle[0] = new int[]{1};
//
//        for (int i = 1; i < triangle.length; i++) {
//            //取上一行数据
//            int[] lastLineArr = triangle[i-1];
//
//            //给每行数据创建一个新数组，数组长度和行数相等
//            int[] currentLineArr = new int[i+1];
//            //每行第一个元素和最后一个元素都是1
//            currentLineArr[0] = 1;
//            currentLineArr[i] = 1;
//
//            //每行除了第一个元素和最后一个元素以外，对其他元素赋值
//            for (int j = 1; j < i; j++) {
//                currentLineArr[j] = lastLineArr[j] + lastLineArr[j-1];
//            }
//
//            triangle[i] = currentLineArr;
//        }
//
//        for (int[] lineNums : triangle) {
//            for (int lineNum : lineNums) {
//                System.out.print(lineNum + " ");
//            }
//            System.out.println();
//        }

        //第十五题 盛水面积最大

        int[] nums = {4,3,2,1,4};
        int height = 0;
        int wide = 0;
        int maxArea = 0;

        for (int i = 0; i < nums.length-1; i++) {
            for (int j = i+1; j < nums.length; j++) {
                //两个值比较，取较小值为 height
                if(nums[i] < nums[j]){
                    height = nums[i];
                }else{
                    height = nums[j];
                }
                //两个值的索引之差作为 wide
                wide = j-i;
                if(height*wide > maxArea){
                    maxArea = height*wide;
                }
            }
        }
        System.out.println("maxArea:"+maxArea);
    }

}
